﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RepositorioSATT;
using DominioSATT;

namespace ServiceSATT
{
    public class PartidoService : IPartidoService
    {
        IPartidoRepositorio repositorio;
        #region Miembros de IPartidoService

        public void Buscar(IInterfazPartido ui)
        {
            repositorio = new PartidoRepositorio();
            IEventoRepositorio repoEvento = new EventoRepositorio();
            Evento bEvento = repoEvento.Obtener(repoEvento.ObtenerId(ui.Evento));
            ITorneoRepositorio repoTorneo = new TorneoRepositorio();
            string[] sTorneo = ui.Torneo.Split(',');
            Torneo bTorneo = repoTorneo.Obtener(bEvento.Id, sTorneo[0].Trim(), sTorneo[1].Trim(), sTorneo[2].Trim());
            Partido bPartido = repositorio.Obtener(bTorneo.Id, ui.Fecha, ui.Cancha);
            ui.DniArbitro = bPartido.Arbitro.Dni;
            ui.Estado = bPartido.Estado;
            ui.Resultado = bPartido.Resultado;
            ui.Ronda = bPartido.Ronda;
            ui.Sede = bPartido.Sede.Nombre;
        }

        public int Agregar(IInterfazPartido ui)
        {
            IEventoRepositorio repoEvento = new EventoRepositorio();
            Evento bEvento = repoEvento.Obtener(repoEvento.ObtenerId(ui.Evento));
            ITorneoRepositorio repoTorneo = new TorneoRepositorio();
            string[] sTorneo = ui.Torneo.Split(',');
            Torneo bTorneo = repoTorneo.Obtener(bEvento.Id, sTorneo[0].Trim(), sTorneo[1].Trim(), sTorneo[2].Trim());
            ISedeRepositorio repoSede = new SedeRepositorio();
            Sede bSede = repoSede.Buscar(ui.Sede);
            IArbitroRepositorio repoArbitro = new ArbitroRepositorio();
            Arbitro bArbitro = repoArbitro.Buscar(ui.DniArbitro);
            Partido nPartido = new Partido(bTorneo, bSede, ui.Fecha, bArbitro, ui.Ronda, "", ui.Cancha, ui.Estado);
            repositorio = new PartidoRepositorio();
            int IdPartido = repositorio.Agregar(nPartido);
            InscripcionPartidoRepositorio repoInscPart = new InscripcionPartidoRepositorio();
            repoInscPart.Agregar(ui.IdInscEquipo1, IdPartido);
            repoInscPart.Agregar(ui.IdInscEquipo2, IdPartido);
            return IdPartido;
        }

        public void Actualizar(IInterfazPartido ui)
        {
            IEventoRepositorio repoEvento = new EventoRepositorio();
            Evento bEvento = repoEvento.Obtener(repoEvento.ObtenerId(ui.Evento));
            ITorneoRepositorio repoTorneo = new TorneoRepositorio();
            string[] sTorneo = ui.Torneo.Split(',');
            Torneo bTorneo = repoTorneo.Obtener(bEvento.Id, sTorneo[0].Trim(), sTorneo[1].Trim(), sTorneo[2].Trim());
            ISedeRepositorio repoSede = new SedeRepositorio();
            Sede bSede = repoSede.Buscar(ui.Sede);
            IArbitroRepositorio repoArbitro = new ArbitroRepositorio();
            Arbitro bArbitro = repoArbitro.Buscar(ui.DniArbitro);
            Partido nPartido = new Partido(bTorneo, bSede, ui.Fecha, bArbitro, ui.Ronda, ui.Resultado, ui.Cancha, ui.Estado);
            repositorio = new PartidoRepositorio();
            repositorio.Modificar(nPartido);
        }

        public void Listado(IListadoPartidos ui)
        {
            IEventoRepositorio eventoRepo = new EventoRepositorio();
            int IdEvento = eventoRepo.ObtenerId(ui.Evento);
            string[] datosTorneo = ui.Torneo.Split(',');
            string categoria = datosTorneo[0].Trim();
            string tipo = datosTorneo[1].Trim();
            string sexo = datosTorneo[2].Trim();
            ITorneoRepositorio torneoRepo = new TorneoRepositorio();
            Torneo bTorneo = torneoRepo.Obtener(IdEvento, categoria, tipo, sexo);
            repositorio = new PartidoRepositorio();
            List<Partido> ListaPartidos = repositorio.Listar(bTorneo.Id);
            string[][] Lista = new string[ListaPartidos.Count / 2][];
            int i = 0;
            int j = 0;
            foreach(Partido Part in ListaPartidos)
            {
                string Equipo1 = "";
                string Equipo2 = "";
                if (j == Part.Id)
                {
                    Equipo2 = Part.Equipos[0].Inscripto.Apellido + " " + Part.Equipos[0].Inscripto.Nombre;
                    Lista[i - 1][2] = Equipo2;
                }
                else
                {
                    Equipo1 = Part.Equipos[0].Inscripto.Apellido + " " + Part.Equipos[0].Inscripto.Nombre;
                    Lista[i] = new string[] { Part.Id.ToString(), Equipo1, Equipo2, Part.Sede.Nombre, Part.Cancha.ToString(), Part.Arbitro.Apellido + " " + Part.Arbitro.Nombre, Part.Fecha.ToShortDateString(), Part.Ronda.ToString(), Part.Estado.ToString() };
                }
                i++;
                j = Part.Id;
            }
            ui.Listado = Lista;
        }

        #endregion
    }
}
